package com.zy.explore.db.infrastructure.plugins.multidbsupport.sqlchange.function;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;

/**
 * 建类说明：抽象有趣变化工厂
 *
 * @author 中国印
 * @date 2022年02月16日 23:11:53
 */
public abstract class AbstractFunChangeFactory {
	protected final Map<String,FunChange> map = new HashMap<>();
	
	/** 合并方法 */
	protected static String merge(String name, String... args){
		return name+'(' + StringUtils.join(args, ',') + ')';
	}
	/** 合并方法 */
	protected static String merge(String name, List<String> args){
		return name+'(' + StringUtils.join(args, ',') + ')';
	}
	/** 新增一个 */
	protected final void add(String name,FunChange fc){
		// 函数名统一小写
		name = name.toLowerCase();
		map.put(name, fc);
	}
	/** 新增多个 */
	protected void addAll(Map<String,FunChange> map){
		if(map == null){
			return ;
		}
		this.map.putAll(map);
	}
	
	/** 获取所有 */
	public Map<String,FunChange> getAll(){
		return map;
	}
	
	/** 根据函数名获取 */
	public FunChange get(String name){
		return map.get(name);
	}
}
